package com.work.main;

import com.work.Enum.ObjectEnum;
import com.work.handle.AopHandle;
import com.work.handle.CglibProxy;
import com.work.service.IBaseService;
import com.work.service.impl.BaseServiceImpl;
import com.work.service.impl.FankServiceImpl;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;

/**
 * @ClassName AopTest
 * @Description aop代理测试类
 * @Author Administrator
 * @Date 2019/3/6 0006 22:59:20
 * @Version 1.0.0
 **/
public class AopTest {
    public static void main(String[] args) {
//        IBaseService baseService = new BaseServiceImpl();
//        InvocationHandler aopHandle = new AopHandle(baseService);
        /**
         * 通过Proxy的newProxyInstance方法创建代理对象
         * 参数1：一个classloader对象，定义了由哪个classloader对象对生
         *       成的代理类进行加载一个classloader对象，定义了由哪个classloader
         *       对象对生成的代理类进行加载
         * 参数2：一个interface对象数组，表示我们将要给我们的代理对象提供一组什么
         *      样的接口，如果我们提供了这样一个接口对象数组，那么也就是声明了代理
         *      类实现了这些接口，代理类就可以调用接口中声明的所有方法。
         *
         * 参数3：一个InvocationHandler对象，表示的是当动态代理对象调用方法的时候
         *       会关联到哪一个InvocationHandler对象上，并最终由其调用
         */
//        IBaseService baseService1 = (IBaseService)Proxy.newProxyInstance(BaseServiceImpl.class.getClassLoader(),
//                baseService.getClass().getInterfaces(),aopHandle);
//        System.out.println(baseService1.commonTest2Method());
//        System.out.println(baseService1.commonTestMethod());


        CglibProxy proxy = new CglibProxy();
        FankServiceImpl proxy1 =(FankServiceImpl)proxy.getProxy(FankServiceImpl.class);
        proxy1.fank2Mehod();
    }
}
